package com.share.device.emqx.aspect;

import com.share.device.emqx.annotation.DictFormat;
import lombok.RequiredArgsConstructor;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.Collection;
import java.util.concurrent.TimeUnit;

/**
 * @version 1.0
 * @author: CY_Guo
 * @date: 2025/5/8 15:29
 * @Descript TODO 请概括该类
 */
@Aspect
@Component
@RequiredArgsConstructor
public class DictAspect {
//    private final RedisTemplate<String, String> redisTemplate;
//    private final JdbcTemplate jdbcTemplate;  // 简单粗暴，实际用ORM
//
//    @Around("@within(org.springframework.stereotype.Service)")
//    public Object doDictFormat(ProceedingJoinPoint joinPoint) throws Throwable {
//        Object result = joinPoint.proceed();
//        if (result == null) return null;
//
//        // 处理集合或单个实体
//        if (result instanceof Collection) {
//            ((Collection<?>) result).forEach(this::formatDictFields);
//        } else {
//            formatDictFields(result);
//        }
//        return result;
//    }
//
//    private void formatDictFields(Object entity) {
//        Arrays.stream(entity.getClass().getDeclaredFields())
//                .filter(field -> field.isAnnotationPresent(DictFormat.class))
//                .forEach(field -> {
//                    try {
//                        field.setAccessible(true);
//                        Object keyValue = field.get(entity);
//                        if (keyValue == null) return;
//
//                        DictFormat dictFormat = field.getAnnotation(DictFormat.class);
//                        String dictName = getDictName(dictFormat.dictType(), keyValue.toString());
//                        if (dictName != null) {
//                            // 这里简单处理，实际可注入到指定字段（如xxxName）
//                            System.out.println("Dict value: " + dictName);  // 替换为你的逻辑
//                        }
//                    } catch (IllegalAccessException e) {
//                        throw new RuntimeException("反射失败，检查字段权限", e);
//                    }
//                });
//    }
//
//    private String getDictName(String dictType, String key) {
//        String cacheKey = "dict:" + dictType + ":" + key;
//        String cachedValue = redisTemplate.opsForValue().get(cacheKey);
//        if (cachedValue != null) return cachedValue;
//
//        // 查DB并塞缓存
//        String sql = "SELECT name FROM " + dictType + "_table WHERE id = ?";
//        String dictName = jdbcTemplate.queryForObject(sql, String.class, key);
//        if (dictName != null) {
//            redisTemplate.opsForValue().set(cacheKey, dictName, 1, TimeUnit.DAYS);
//        }
//        return dictName;
//    }
}